/*
 * @Author: your name
 * @Date: 2021-12-25 08:25:02
 * @LastEditTime: 2021-12-25 09:32:21
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: /day17/egg/app/controller/pay.js
 */
'use strict';

const Controller = require('egg').Controller;
// 提供支付功能
const AliPaySDK = require('alipay-sdk').default;
// 支付信息 。我们用formData 来包裹
const AliPayFormData = require('alipay-sdk/lib/form').default

class PayController extends Controller {
  async index() {
    const { ctx, config } = this;
    //解构前端传递的参数
    const { totalAmount, subject, body } = ctx.request.body;
    // 将支付配置 存入到支付功能 AliPaySDK
    const aliPaySDK = new AliPaySDK({
      // 用户id
      appId: '2021000120616130',
      // 应用私钥
      privateKey: config.payConfig.privateKey,
      // 支付宝公钥
      alipayPublicKey: config.payConfig.alipayPublicKey,
      signType: 'RSA2', // 签名算法
      gateway: 'https://openapi.alipaydev.com/gateway.do', // 支付宝网关地址
      timeout: 5000, // 网关超时时间，单位毫秒
      camelcase: true // 驼峰写法
    })

    // 我们需要支付信息 ，那么我们将AliPayFormdata 存放支付信息
    const formData = new AliPayFormData();

    formData.setMethod('get'); // 请求方式

    formData.addField('appId', '2021000120616130'); //APPID
    formData.addField('charset', 'utf-8');
    formData.addField('signType', 'RSA2');
    formData.addField('notifyUrl', 'https://eggjs.org/zh-cn/intro/quickstart.html');
    console.log(totalAmount,subject,body)
    formData.addField('bizContent', {
      outTradeNo: "456572sdfdgv32343542434z", // 该交易在支付宝系统中的交易流水号。最短 16 位，最长 64 位。和out_trade_no不能同时为空，如果同时传了 out_trade_no和 trade_no，则以 trade_no为准。
      productCode: 'FAST_INSTANT_TRADE_PAY', // 【必选】销售产品码，目前仅支持FAST_INSTANT_TRADE_PAY
      totalAmount:+totalAmount, // 交易金额,
      subject:"111", // 标题
      body:'22', // 内容
    });
    // console.log('formData ==============>', formData);

    // exec 向支付宝调用参数

    ctx.body = await aliPaySDK.exec('alipay.trade.page.pay', {}, { formData })
  }
}

module.exports = PayController;
